package com.markerhub.handler;

import com.markerhub.entity.Tb_User;
import com.markerhub.pojo.dto.UserDto;

/**
 * @Author by MaXiaofeng
 * @Description 通过线程独立变量来维护token
 * @Date 2022/2/10 16:46
 * @Version 1.0.0
 */

public class UserThreadLocal {
    /**
     * ThreadLocal是解决线程安全问题一个很好的思路，它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。
     * 在很多情况下，ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单，更方便，且结果程序拥有更高的并发性。
     */
    private static final ThreadLocal<UserDto> LOCAL = new ThreadLocal<>();

    /**
     * 设置当前线程的线程局部变量的值
     *
     * @return
     */
    public static void put(UserDto userDto) {
        LOCAL.set(userDto);
    }
    /**
     * 返回当前线程所对应的线程局部变量
     *
     * @return
     */
    public static UserDto get() {
        return LOCAL.get();
    }

    /**
     * 将当前线程局部变量的值删除，目的是为了减少内存的占用
     */
    public static void remove() {
        LOCAL.remove();
    }
}
